#ifndef __PROTOCOL_H
#define __PROTOCOL_H

#include  <stdint.h>
#include  <stdbool.h>
#include "msg.h"

// 协议命令类型
#define CMD_FAIL 							0x00	// 失败
#define CMD_SUCCESS 					0x01	// 成功
#define CMD_QUERY_VERSION 		0x02	// 查询下位机版本信息
																		// 下位机返回本机当前版本信息
#define CMD_FIRMWARE_START 		0x03	// 上位机发送固件数据，2字节包序号，后200字节固件内容
#define CMD_FIRMWARE 					0x04	// 上位机发送固件数据，2字节包序号，后200字节固件内容
#define CMD_FIRMWARE_END			0x05	// 上位机发送固件更新结束消息
																		// 下位机发送固件更新结束消息，携带最新版本号													
#define CMD_TASK_CONFIG				0x09	// 任务配置
#define CMD_IO_CONFIG					0x10	// IO口配置使能开关
#define CMD_IO_OUT						0x11	// IO口输出电平设置
#define CMD_IO_IN							0x12	// IO口状态反馈
#define CMD_ADC_CONFIG				0x20	// ADC使能开关
#define CMD_ADC_VALUE					0x21	// ADC数据，含AD值，电压值
#define CMD_DAC_CONFIG				0x30	// DAC口配置使能开关
#define CMD_DAC_VALUE					0x31	// DAC口配置输出电压值
#define CMD_PWM_CONFIG				0x40	// PWM口配置频率
#define CMD_PWM_VALUE					0x41	// PWM口配置输出占空比
#define CMD_IIC_CONFIG				0x50	// IIC口配置使能开关，携带速率信息
#define CMD_IIC_WRITE					0x51	// IIC口向指定设备地址，指定寄存器写入数据
#define CMD_IIC_READ					0x52	// IIC口读取指定设备地址，指定寄存器数据
																		// 返回读取到的数据到上位机
#define CMD_SPI_CONFIG				0x60	// SPI口配置使能开关
#define CMD_SPI_READ_WRITE		0x61	// SPI口写数据的同时会读取到一字节
#define CMD_KEY_VALUE					0x70	// 按键状态反馈

// 任务序号
typedef enum
{
	TASK_IO=1,
	TASK_ADC,
	TASK_DAC,
	TASK_PWM,
	TASK_IIC,
	TASK_SPI,
	TASK_KEY
} TASK_NUM;	

// 任务状态
typedef enum
{
	TASK_CLOSE=0, // 关任务
	TASK_ON				// 开任务
} TASK_STAT;	


void protocolDeal(MSG_T msg);

#endif

